﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;

using p_Library;
using LIM.model;
using LIM.controller;

namespace LIM.forms
{
    public partial class radForm_SYS_Logon : Telerik.WinControls.UI.RadForm
    {
        public radForm_SYS_Logon()
        {
            InitializeComponent();
        }

        private void linkLabel_Thoat_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;            
        }
        
        private void radForm_SYS_Logon_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                radButton_DangNhap_Click(sender, e);
            }
            else if (e.KeyCode == Keys.F1)
            {
                this.DialogResult = DialogResult.OK;
                InitUserInfos.IsAdmin = true;
                InitUserInfos.RowIDUser = 0;
                InitUserInfos.UserName = "Admin";

                //DanhMucHeThongController DanhMucHeThongController = new DanhMucHeThongController();
                //List<tbl_DanhMuc_HeThong> list = DanhMucHeThongController.LoadDataChild("TinhTrangBaoGia");

            }
            //base.OnKeyDown(e);
        }

        private void radButton_DangNhap_Click(object sender, EventArgs e)
        {            
            switch (ValidatingAccount())
            {
                case 0:
                    this.DialogResult = DialogResult.OK;
                    break;                
                default:
                    this.textBox_TenDangNhap.Focus();
                    break;
            }

        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns>
        /// 0: Đăng nhập thành công
        /// 1: Sai thông tin đăng nhập
        /// 2: Người dùng đã bị khóa
        /// 
        /// </returns>
        private int ValidatingAccount()
        {
            string username = this.textBox_TenDangNhap.Text;
            string password = (new cls_CONCryptography()).mtd_Encrypt(this.textBox_MatKhau.Text);

            SYSController _SYSController = new SYSController();
            tbl_SYS_Users tbl_SYS_Users = _SYSController.Get_Users_ByUsernamePassword(username, password);

            if (tbl_SYS_Users != null)
            {
                if (tbl_SYS_Users.IsActived.GetValueOrDefault(false))
                {
                    InitUserInfos.IsAdmin = IsAdmin(username);
                    InitUserInfos.RowIDUser = tbl_SYS_Users.RowID;
                    InitUserInfos.UserName = username;

                    foreach (var item_role in _SYSController.GetList_AssignedRoles(tbl_SYS_Users.RowID))
                    {
                        InitUserInfos.Roles.Add(new RolesInfo { RowIDRole = item_role.RowID, RoleName = item_role.RoleName, Description = item_role.Description });

                        foreach (var item_menu in _SYSController.GetList_MenuPermissions_ByRowIDRole(item_role.RowID))
                        {
                            InitUserInfos.MenuPermissions.Add(new MenuPermissionsInfo { Name = item_menu.MenuName, IsVisibility = true });
                        }

                        foreach (var item_control in _SYSController.GetList_ControlPermissions_ByRowIDRole(item_role.RowID))
                        {
                            InitUserInfos.ControlPermissions.Add(new ControlPermissionsInfo { FormName = item_control.FormName, Name = item_control.ControlName, IsVisibility = true, IsEnabled = item_control.IsEnabled.GetValueOrDefault(false) });
                        }		 
                        
                        foreach (var item_form in _SYSController.GetList_FormPermissions_ByRowIDRole(item_role.RowID))
                        {
                            FormPermissionsInfo FormPermissionsInfo = new FormPermissionsInfo { Name = item_form.FormName, IsVisibility = true, Controls = new List<ControlPermissionsInfo>() };
                            FormPermissionsInfo.Controls.AddRange(InitUserInfos.ControlPermissions.FindAll(s => s.FormName == FormPermissionsInfo.Name));
                            InitUserInfos.FormPermissions.Add(FormPermissionsInfo);
                        }

                    }
                     
                    return 0;
                }
                else
                {
                    this.label_Error.Text = "Người dùng đã bị khóa quyền truy xuất hệ thống. Xin liên hệ với nhân viên quản trị!";
                    return 2;
                }
            }
            else
            {
                this.label_Error.Text = "Tên đăng nhập hoặc mật khẩu bị sai hoặc người dùng chưa được tạo trong hệ thống.";
                return 1;
            }

        }

        private bool IsAdmin(string tenDangNhap)
        {
            return (tenDangNhap.ToLower() == "admin");
        }

        private void linkLabel_Setting_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            radForm_SYS_CauHinhKetNoi form = new radForm_SYS_CauHinhKetNoi();            
            form.ShowDialog();
        }
    }
}
